<?php
/**
 * Created by PhpStorm.
 * User: edmmss
 * Date: 2018/11/9
 * Time: 13:50
 */

namespace app\modules\singleton;


/**
 * Class Singleton
 * @package app\modules\singleton
 */
class Singleton
{
    /**
     * @var Singleton
     */
    private static $_instance;

    /**
     * 通过懒加载获得实例（在第一次使用的时候创建)
     *
     * @date   2018/11/9
     * @author edmmss
     * @return Singleton
     */
    public static function getInstance(): Singleton
    {
        if (static::$_instance === null) {
            static::$_instance = new static();
        }

        return static::$_instance;
    }

    /**
     * 不允许从外部调用以防止创建多个实例
     * 要使用单例，必须通过 Singleton::getInstance() 方法获取实例
     *
     * Singleton constructor.
     */
    private function __construct()
    {

    }

    /**
     * 防止实例被克隆（这会创建实例的副本）
     *
     * @date   2018/11/9
     * @author edmmss
     */
    private function __clone()
    {
        // TODO: Implement __clone() method.
    }

    /**
     * 防止反序列化（这将创建它的副本）
     *
     * @date   2018/11/9
     * @author edmmss
     */
    private function __wakeup()
    {
        // TODO: Implement __wakeup() method.
    }
}